package com.coolingme.reflect03;

import com.coolingme.lazy02.LazyInnerClassSingleton;

import java.lang.reflect.Constructor;

/**
 * 使用反射破坏单例模式
 * <p>
 * 测试单例模式是否可以被反射破坏，而不是故意去破坏。。。
 *
 * @author wangyue
 * @date 2020/9/29 11:28
 */
public class ReflectBreakSingletonTest {

    public static void main(String[] args) {
        try {
            // 拿静态内部类懒汉式单例 做一个测试
            // 获取class对象
            Class<LazyInnerClassSingleton> clazz = LazyInnerClassSingleton.class;

            // 获取私有构造方法,无参
            Constructor<LazyInnerClassSingleton> constructor = clazz.getDeclaredConstructor(null);

            // 强吻,强制访问
            constructor.setAccessible(true);

            // 暴力初始化实例对象
            LazyInnerClassSingleton instance1 = constructor.newInstance();
            LazyInnerClassSingleton instance2 = constructor.newInstance();

            System.out.println(instance1);
            System.out.println(instance2);
            System.out.println(instance1 == instance2);

        } catch (Exception e) {
            e.printStackTrace();
        }


    }

}
